package com.sjc.designpattern.facade;

/**
 * @Classname WithoutFacadePatternDemo
 * @Description 不使用外观模式
 * @Date 2020/4/25 16:07
 * @Created by SangJiacun
 */
public class WithoutFacadePatternDemo {
    public static void main(String[] args) {
        // 假设这里是子系统2，要基于子系统1的3个模块的功能实现一个业务逻辑
        ModuleA moduleA = new ModuleA();
        ModuleB moduleB = new ModuleB();
        ModuleC moduleC = new ModuleC();

        moduleA.execute();
        moduleB.execute();
        moduleC.execute();

        // 这么搞会有什么问题？
        // 问题一：对应子系统2来说，维护成本太高了，就是因为要care多个子系统1的模块。如果只是3个模块还凑合，若果是
        // 20个模块呢？那子系统2对子系统1的各个模块的了解就要很多，维护成本很高。
        // 问题二：这个 多个模块组成的一个功能，如果在子系统2的多个地方都使用到了，那么那段代码就会在多个地方
        // 都有重复，复制粘贴的过程，一旦这段业务逻辑修改了，比如还要加入一个模块D的功能，可能就要修改多个地方的代码，会弄的非常的麻烦
    }

    public static class ModuleA {
        public void execute() {
            System.out.println("子系统1的模块A 的功能");
        }
    }

    public static class ModuleB {
        public void execute() {
            System.out.println("子系统1的模块B 的功能");
        }
    }

    public static class ModuleC {
        public void execute() {
            System.out.println("子系统1的模块C 的功能");
        }
    }
}
